home *** CD-ROM | disk | FTP | other *** search
/ Shareware Grab Bag / Shareware Grab Bag.iso / 011 / adikit.arc / DSDEMO.C < prev    next >
Encoding:
C/C++ Source or Header  |  1986-12-01  |  6.1 KB  |  274 lines

  1. /*    DSDRV.C        Sample ADI Display driver        */
  2.  
  3.  
  4. #include <stdio.h>
  5. #include <adi.h>            /* ADI Interface codes */
  6. #include <dsadi.h>            /* ADI Display driver codes */
  7.  
  8. static struct comreg r;            /* Register interface structure */
  9.  
  10. /* Miscellaneous locals */
  11.         
  12. static int fromx, fromy;        /* FROM (x,y) coords for line */
  13. static int hilite;            /* current highlight flag */
  14. static int boxno, curcolor;        /* current menu box, color */
  15. static int printcmd = 1;        /* command print flag */
  16.                     /*   currently always enabled */
  17. static int lastcmd = 0;            /* last command code received */
  18. static int lastrdrw = 0;        /* last REDRAW status returned */
  19. static char com_buf[81];        /* display driver command buffer */
  20.         
  21. #define MAXSTRING  120
  22.  
  23. #ifdef    MAXSTRING
  24. static char savechar[MAXSTRING];    /* Text string save area */
  25. static int charpos = 0;            /* position in char save buffer */
  26. #endif
  27.         
  28. main(argc,argv)
  29. int argc;
  30. char *argv[];
  31. {
  32.     int cmdsave;
  33.     
  34.     printf("DSDEMO 1.3 - Test ADI Display Driver\n");
  35.  
  36.     if (printcmd)
  37.     printf("Print command mode\n\n");
  38.     
  39.     while (1)
  40.     {
  41.     iwait(0x7A, &r, &r);
  42. #ifdef    DEBUG
  43.     printf("\n ** Display(%d):  %d(%04x), %d(%04x), %d(%04x) **",
  44.         r.code, r.arg1, r.arg1, r.arg2, r.arg2, r.arg3, r.arg3);
  45. #endif
  46.     switch (cmdsave = r.code) 
  47.         {
  48.         case INIT1:
  49.         if (lsb(r.arg2) < INTLEVEL)    /* Acceptable interface? */
  50.             r.code = 0;            /* Nope...return error */
  51.           else
  52.             r.code = 1;            /* Yes...return OK status */
  53.         r.arg1 = 620;
  54.         r.arg2 = 350;
  55.         r.arg3 = 750;
  56.         break;
  57.         
  58.         case INIT2:
  59.         r.arg1 = packbyte(37, 8);
  60.         r.arg2 = packbyte(20, DM_CCECH | DM_HLEN | DM_GROK);
  61.         r.arg3 = packbyte(3, 2);
  62.         break;
  63.         
  64.         case INIT3:
  65.         r.arg1 = 1;
  66.         r.arg2 = 1;
  67.         r.arg3 = packbyte(25, 80);
  68.         break;
  69.         
  70.         case INIT4:
  71.         r.arg1 = 0;
  72.         r.arg2 = (EF_SYNC | EF_REDRAW | EF_CMD | EF_XPCMD);
  73.         break;
  74.         
  75.         case INIT5:
  76.         r.arg1 = 350;
  77.         r.arg2 = 350;
  78.         break;
  79.         
  80.         case TERM:
  81.         if (printcmd)
  82.             printf("TERM\n");
  83.         break;
  84.         
  85.         case CLEAR:
  86.         if (printcmd)
  87.             printf("\nCLEAR SCREEN");
  88.         r.arg1 = 0;        /* no need to repaint anything */
  89.         break;
  90.         
  91.         case DOT:
  92.         if (printcmd)
  93.             printf("\nDOT at (%d, %d)", r.arg1, r.arg2);
  94.         break;
  95.         
  96.         case MOVE:
  97.         hilite = r.arg3 & DR_HILITE;
  98.         if (printcmd)
  99.             printf("\nMOVE to (%d, %d), highlight = %c, non-draw = %c",
  100.             r.arg1, r.arg2,
  101.             hilite ? 'Y' : 'N', 
  102.             (r.arg3 & DR_NORDRW) ? 'Y' : 'N');
  103.         break;
  104.  
  105.         case DRAW:
  106.         if (printcmd)
  107.             printf("\nDRAW to (%d, %d), color = %d %s",
  108.             r.arg1, r.arg2, r.arg3, hilite ? "(highlighted)" : "");
  109.         break;
  110.         
  111.         case FLOOD:
  112.         if (printcmd)
  113.             printf("\nFLOOD vertex (%d, %d), color = %d %s",
  114.             r.arg1, r.arg2, r.arg3, hilite ? "(highlighted)" : "");
  115.         break;
  116.         
  117.         case MARK:
  118.         if (printcmd)
  119.             printf("\nCURSOR at (%d, %d), type = %d",
  120.             r.arg1, r.arg2, r.arg3);
  121.         if (r.arg3 == 0 || r.arg3 == 3)
  122.             r.arg1 = 0;
  123.           else
  124.             r.arg1 = 1;
  125.         break;
  126.         
  127.         case CMARK:
  128.         if (r.arg3 == 0 || r.arg3 == 3)
  129.             r.arg1 = 0;
  130.           else
  131.             r.arg1 = 1;
  132.         break;
  133.         
  134.         case CHAR:
  135. #ifdef    MAXSTRING
  136.         savechar[charpos++] = r.arg1;    /* save char for later */
  137. #else
  138.         if (printcmd)
  139.             switch(boxno)
  140.             {
  141.             case -3:
  142.                 printf("\nCoordline char %c\n", r.arg1);
  143.                 break;
  144.                 
  145.             case -2:
  146.                 printf("\nModeline char %c\n", r.arg1);
  147.                 break;
  148.                 
  149.             case -1:
  150.                 printf("\nPrompt char %c\n", r.arg1);
  151.                 break;
  152.             
  153.             default:
  154.                 printf("\nMenu box %d: char %c\n", boxno, r.arg1);
  155.                 break;
  156.             }
  157. #endif            
  158.         break;
  159.         
  160.         case ECHAR:
  161. #ifdef    MAXSTRING    
  162.         savechar[charpos] = '\0';    /* terminate string */
  163.         switch (boxno)
  164.             {
  165.             case -3:
  166.             printf("\nCoordline:  %s\n", savechar);
  167.             break;
  168.             
  169.             case -2:
  170.             printf("\nModeline:  %s, curcolor = %d\n", 
  171.                 savechar, curcolor);
  172.             break;
  173.             
  174.             case -1:
  175.             printf("\nPrompt:  %s\n", savechar);
  176.             break;
  177.  
  178.             default:
  179.             printf("\nMenu box %d: %s\n", boxno, savechar);
  180.             break;
  181.             }
  182.         charpos = 0;            /* reset for next time */
  183. #else
  184.         printf("\nECHAR:\n");
  185. #endif        
  186.         break;
  187.         
  188.         case MHLITE:
  189.         printf("\nHIGHLIGHT menu box %d", boxno);
  190. #ifdef    MAXSTRING    
  191.         r.arg1 = 0;        /* Don't need to re-send chars */
  192. #else
  193.         r.arg1 = 1;        /* Send us the characters */
  194. #endif
  195.         break;
  196.         
  197.         case MDHLITE:
  198.         printf("\nDEHIGHLIGHT menu box %d", boxno);
  199. #ifdef    MAXSTRING    
  200.         r.arg1 = 0;        /* We don't want to see chars! */
  201. #else
  202.         r.arg1 = 1;        /* Send us the characters */
  203. #endif
  204.         break;
  205.         
  206.         case MNUCUR:
  207.         boxno = r.arg1;        /* save box number for later */
  208.         break;
  209.         
  210.         case TPROMPT:
  211.         boxno = -1;        /* set text cursor to prompt area */
  212.         break;
  213.         
  214.         case QPLOT:
  215.         r.code = 0;        /* Sorry...can't do it */
  216.         break;
  217.         
  218.         case RPEN:
  219.         r.arg1 = 0;        /* Sorry...can't do it */
  220.         break;
  221.         
  222.         case GOTEXT:
  223.         case GOTEXTU:
  224.         printf("\nText mode:");
  225.         break;
  226.         
  227.         case GOGRAPH:
  228.         printf("\nGraphics mode:");
  229.         break;
  230.         
  231.         case WRSPLIT:
  232.         printf("\nPrompt char: %c", r.arg1);
  233.         break;
  234.         
  235.         case MODELINE:
  236.         boxno = -2;        /* Flag modeline text */
  237.         curcolor = r.arg2;
  238.         break;
  239.         
  240.         case COORDLIN:
  241.         boxno = -3;        /* Flag coordline text */
  242.         break;
  243.  
  244.         case SYNC:
  245.         if (lastcmd != SYNC)
  246.             printf("\nSync:");
  247.         break;
  248.         
  249.         case REDRAW:
  250.         lastrdrw = r.code = lastrdrw ^ 0x0001;
  251.         printf("\nRedraw: Arg1 = %d, return = %d", r.arg1, r.code);
  252.         break;
  253.         
  254.         case DSCOMAND:        /* Display driver command */
  255.         peek(r.arg3, r.arg2, &com_buf, min(r.arg1, sizeof com_buf));
  256.         com_buf[sizeof com_buf - 1] = '\0'; /* insure terminator */
  257.         printf("Display driver command: %s\n", com_buf);
  258.         r.code = 1;
  259.         break;
  260.         
  261.         case DSXPCOMD:        /* Display driver transparent cmd */
  262.         printf("Display driver transparent command\n");
  263.         r.code = 1;
  264.         break;
  265.         
  266.         default:
  267.         printf("*****  Unknown request code = %d  *****\n", r.code);
  268.         r.code = 0;
  269.         
  270.         }  /* end SWITCH */
  271.     lastcmd = cmdsave;
  272.     }  /* end WHILE */
  273. }  /* end program */
  274.